/* Funcion nl, imprime el número de línea, seguido del número de linea propiamente dicho de un archivo de entrada */ 

/*separator -- Indica el texto separador entre número de línea y la línea. */ 
/*line_st_number -- Indica el número de la primer línea. */ 
/*line_increment -- Indica el incremento entre líneas consecutivas. */
/*line_empty -- true - enumera las líneas vacías. false - no enumera líneas vacias */
/*jblank_lines -- Indica la cantidad de líneas vacías a agrupar en una única línea. */
/*file_in -- archivo de entrada, si es NULL lee el stdin */

#define MAX_LINE 500  /* cantidaad máxima de caracteres */


int nl(char* separator, int line_st_number, int line_increment, bool line_empty, int jblank_lines, FILE* file_in){

  char line[MAX_LINE];                /* arrego auxiliar para guardar la línea leida */      
	int blank_line_counter=1;           /* contador de lineas en blanco */
	int line_number=line_st_number;     /* contador número de linea */
  bool print_line=false;
 
	if (file_in == NULL) file_in=stdin; 
	
   
  fgets (line, MAX_LINE, file_in);
	
	while ( ! feof (file_in) )
	{          
		               

		if ( strlen(line) == 1 )    /* linea en blanco */ 
		{
			if( line_empty == true )
			{
				if ( jblank_lines == blank_line_counter )
				{
          print_line=true;
          blank_line_counter=1;
          line_number=line_number+line_increment;
				}
				else blank_line_counter++;
                                      
		}
		else
		{
      print_line=true;
      line_number=line_number+line_increment;
		}
		
		if(print_line==true){
          printf("%i %s ", line_number, separator);
          fputs (line , stdout);
    }
    fgets (line, MAX_LINE, file_in);
    print_line=false;
	}

	return 0;
}
